package org.alesv.entranceExams.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;

import org.alesv.entranceExams.Constants;

/**
 * @author
 */
public class GameOfGhostStringUtils {

	/**
	 * Para el foramteo de las fechas.
	 */
	private static final String DATE_FORMAT = "dd/MM/yyyy";

	/**
	 * Realiza el truncado de la descripcion sin cortar palabras e insertando
	 * "..." al final.
	 * 
	 * @param description
	 *            , descripcion
	 * @param maxSize
	 *            , tamaño maximo de caracteres
	 * @return String
	 */
	public static String cutText(String description, int maxSize) {
		return cutTextWithBR(description, maxSize, false);
	}

	/**
	 * Realiza el truncado de la descripcion sin cortar palabras e insertando
	 * "..." al final.
	 * 
	 * @param description
	 *            , descripcion
	 * @param maxSize
	 *            , tamaño maximo de caracteres
	 * @param br
	 *            br.
	 * @return String
	 */
	public static String cutTextWithBR(String description, int maxSize,
			boolean br) {

		String text = null;
		boolean seguir = true;

		if (description.length() > maxSize) {
			StringTokenizer stTexto = new StringTokenizer(description);
			while (stTexto.hasMoreTokens() && (seguir)) {
				String sCadena = stTexto.nextToken();
				if ((br && (!sCadena.contains(Constants.BR_UPPER)) && (!sCadena
						.contains(Constants.BR))) || (!br)) {
					if ((text != null) && (sCadena.length() > 0)) {
						if (sCadena.length() + text.length() <= maxSize) {
							text = text + " " + sCadena;
						} else if (sCadena.length() + text.length() > maxSize) {
							seguir = false;
						}
					} else if (text == null) {
						text = sCadena;
					}
				} else {
					seguir = false;
				}
			}
			if ((text != null) && (text.length() < description.length())) {
				text = text + "...";
			}
		} else {
			text = description;
		}
		return text;

	}

	/**
	 * Convierte un listado en un String, concatenando los elementos del listado
	 * separados por el separador.
	 * 
	 * @param list
	 *            list.
	 * @param separator
	 *            separator.
	 * @return String
	 */
	public static String toString(List<String> list, String separator) {
		String result = "";

		if ((list != null) && (list.size() > 0)) {
			StringBuilder stringBuilder = new StringBuilder();
			for (int i = 0; i < list.size(); i++) {
				stringBuilder.append(list.get(i));
				if (i < (list.size() - 1)) {
					stringBuilder.append(separator);
				}
			}
			result = stringBuilder.toString();
		}
		return result;
	}

	/**
	 * Devuelve una cadena la cual no contiene la cadena s_chars.
	 * 
	 * @param s_main
	 *            s_main.
	 * @param s_chars
	 *            s_chars.
	 * @return String
	 */
	public static String deleteChars(String s_main, String s_chars) {
		String newString = "";

		/*
		 * Va recorriendo la cadena s_cadena y copia a la cadena que va a
		 * regresar, sólo los caracteres que no estén en la cadena s_caracteres
		 */

		if (!new Integer(s_main.lastIndexOf(s_chars)).equals(new Integer(-1))) {

			newString = s_main.substring(0, s_main.lastIndexOf(s_chars));

		}

		return newString;
	}

	/**
	 * Convierte un tipo fecha en cadena.
	 * 
	 * @param date
	 *            Fecha.
	 * @return Cadena que representa la fecha.
	 */
	public static String getDateAsString(Date date) {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
		return date != null ? simpleDateFormat.format(date) : "";
	}
}
